Wichtig !!! | N E U E S ... | Inhalt | Hotline | Stichwortverzeichnis |
Kapitel 5-5
Der Befehlssatz: FN - INPUT USING
FN | |
Typ: | Funktion |
Syntax: | FN <Variable>[(<Ausdruck>[[,<Ausdruck>]])] FN <Funktions-Variable>[(<Parameter>[[,Parameter]])] |
Erklärung: | Ruft eine durch DEF FN definierte Funktion auf und weist der Funktions-Variablen den Funktionswert zu. Die in der Definition genannten Parameter müssen in Klammern und durch Kommata getrennt übergeben werden. |
Beispiel: |
PRINT FN Primzahl$(12) END DEF FN Dreifach(A)=3*A |
Ergebnis: |
keine Primzahl |
siehe auch: | DEF FN END_FN RETURN |
FOR | |
Typ: | Befehl |
Syntax: | FOR <num.Variable>= <num.Ausdruck>TO <num.Ausdruck>[STEP] <num.Ausdruck><Befehle>NEXT
[<num.Variable>][[,<num.Variable>]] FOR <Schleifenvariable>= <Start>TO <End>[STEP <Schrittweite>] <Schleifeninhalt>NEXT [<Schleifenvariable>] |
Erklärung: | Das ist die wohl bekannteste Programmschleife. Der Schleifenvariablen wird zu Beginn der Startwert zugewiesen,
welcher sodann bei jedem neuen Durchlauf um die Schrittweite erhöht oder erniedrigt wird. Fehlt die Schrittweite,
so wird sie automatisch auf "+1" festgelegt. Mögliche Schleifenvariablen sind alle einfachen Variablentypen, jedoch keine Feldelemente. Wenn die Schleifenvariable abwärts gezählt werden soll, ist eine negative Schrittweite anzugeben (z.B. "-1"). Wenn die Schleifenbedingung gleich zu Anfang nicht erfüllt ist (z.B. Startwert ist größer als Endwert bei positiver Schrittweite), dann wird die Schleife überhaupt nicht durchlaufen. Die FOR ... NEXT Schleife ist also eine abweisende Schleife. Die Schleife wird geschlossen durch die NEXT-Anweisung wobei die Schleifenvariable weggelassen werden kann. Die NEXT-Anweisung bezieht sich dann immer auf die letzte FOR-Anweisung. Die Schleife kann auch vorzeitig mit EXIT verlassen werden. |
Beispiel: |
PRINT X# NEXT DIM A(10) |
Ergebnis: |
Die zweite Schleife schreibt 11 Zufallszahlen zwischen 0 und 20 auf den Bildschirm. Die dritte Schleife schließlich gibt die größte dieser Zufallszahlen aus: Die größte Zahl ist: .... |
siehe auch: | NEXT WHILE REPEAT |
FORM_ALERT | |
Typ: | Befehl |
Syntax: | FORM_ALERT (<num.Ausdruck>,<String-Ausdruck>[,<Variable>) FORM_ALERT (<Default>,<Warnmeldung>[,<Rückgabe>) |
Erklärung: | Stellt eine Warn-Box dar. <Default> gibt an, welcher der in <Warnmeldung> genannten Knöpfe durch
die Return-Taste ausgelöst werden kann. Soll dies für keinen gelten, so ist <Default> gleich 0
zu übergeben. Die Warnmeldung ist folgendermaßen aufgebaut: [Icon][Zeile 1|Zeile 2|Zeile 3|Zeile 4|Zeile 5|][Knopf 1|Knopf 2| Knopf 3] Icon ist eine Zahl zwischen 0 und 3: 0: kein Icon 1: Achtung-Symbol 2: Hinweis-Symbol 3: Stop-Symbol Andere Werte können zu Störungen im Layout der Alertbox oder sogar zum Absturz führen. Die Zeilen dürfen jeweils höchstens 39 Zeichen lang sein. Die Knopfgröße orientiert sich an der Länge des jeweiligen Textes (notfalls Leerzeichen einfügen, um einen breiteren Knopf zu erhalten). Nach Ausführung enthält <Rückgabe> die Nummer des gewählten Knopfes. Achtung: Wenn die Maus ausgeschaltet ist, so muß sie vor dem Aufruf unbedingt eingeschaltet werden, da man sonst die Buttons der Alert-Box nicht bedienen kann. |
Beispiel: |
FORM_ALERT (1,"[2][Die Datei|"+Datei$+"|wird unwiderruflich gelöscht.][OK|Abbruch]",Datei_Ex) IF Datei_Ex=1 THEN KILL FN Get_Fsspec$(0,0,Datei$) |
Ergebnis: |
|
siehe auch: |
FRAC | |
Typ: | Funktion |
Syntax: | FRAC(<num.Ausdruck>) |
Erklärung: | Ergibt den Nachkommateil des numerischen Ausdrucks. Das Vorzeichen bleibt erhalten. Das Gegenstück zu FRAC ist FIX. |
Beispiel: |
|
Ergebnis: |
|
siehe auch: | FIX INT |
FRE | |
Typ: | Befehl |
Syntax: | FRE <num.Ausdruck> FRE <Speicheradresse> |
Erklärung: | Gibt einen durch MEMORY reservierten Speicherbereich wieder frei. Als Speicheradresse ist die Adresse anzugeben, die beim Aufruf von MEMORY zurückgegeben wurde. |
Beispiel: |
PRINT "Puffer angelegt bei: ";HEX$(Puffer) FRE Puffer |
Ergebnis: |
|
siehe auch: | FRE als Funktion MEMORY CLEAR |
FRE | |
Typ: | Funktion |
Syntax: | FRE({<num.Ausdruck>|<String-Ausdruck>}) FRE({<Dummy>|<Laufwerk>}) |
Erklärung: | Wird ein numerischer Dummy angegeben, so ergibt die Funktion den für den Benutzer freien BASIC-Speicher, nachdem
der String-Heap aufgeräumt wurde (garbage collection). Der Wert des Dummys ist dabei ohne Belang. Wird ein Leerstring (="") übergeben, so ergibt die Funktion den für den Benutzer freien BASIC-Speicher, ohne daß zuvor eine garbage collection durchgeführt wird. Sonst wird der String-Ausdruck als Volume-Bezeichner interpretiert, und der auf diesem Volume freie Speicherbereich ermittelt. |
Beispiel: |
|
Ergebnis: |
|
siehe auch: | FRE als Befehl MEMORY CLEAR |
FSEL_INPUT | |
siehe: | FILESELECT |
GEMDOS | |
Erklärung: | hat in Omikron Basic 6 keine Bedeutung und wird vom Compiler ignoriert. Bitte nicht verwenden. |
GET | |
Typ: | Befehl |
Syntax: | GET <num.Ausdruck>,{<num.Ausdruck>[,<num. Ausdruck]|<String-Variable>,<num.Ausdruck>}
1: GET <Dateinummer>,<Satznummer> 2: GET <Dateinummer>,<Speicheradresse>,<Anzahl> 3: GET <Dateinummer>,<String-Variable>,<Anzahl> |
Erklärung: | Nach Syntax 1 wird ein Datensatz aus der durch die Dateinummer gegebenen Datei gelesen und den in FIELD
genannten Puffervariablen zugewiesen. Die Datei muß zuvor mittels OPEN "R" geöffnet worden
sein. Ist der Datensatz nicht vorhanden, so enthalten die Puffervariablen Leerzeichen. Man kann das
jederzeit mit der Funktion EOF prüfen, die in diesem Fall den Wert "-1"
(=wahr) zurückgibt. Nach Syntax 2 und 3 wird aus der durch die Dateinummer gegebenen Datei die angegebene Anzahl Zeichen gelesen und ab der Speicheradresse bzw. in der String-Variablen abgelegt. Die Datei muß zuvor mit OPEN "U" geöffnet worden sein. Gelesen wird ab der aktuellen Dateiposition, die mit SEEK gesetzt werden kann. GET kann auch benutzt werden, um Daten von der Modemschnittstelle bzw. von der Druckerschnittstelle zu holen. In diesem Fall muß der Kanal zuvor mit OPEN "V" bzw. OPEN "P" geöffnet worden sein. |
Beispiel: | |
Ergebnis: | |
siehe auch: | PUT FIELD OPEN |
GOSUB | |
Typ: | Befehl |
Syntax: | GOSUB <Marke> |
Erklärung: | Verzweigt in das durch <Marke>definierte Unterprogramm. Vom Unterprogramm aus kann mittels RETURN
wieder in das Hauptprogramm zurückgesprungen werden. Dann wird als nächstes der auf die GOSUB-Anweisung
folgende Befehl ausgeführt. Die im Unterprogramm verwendeten Variablen sind global (siehe LOCAL). In Omikron Basic geschriebene Programme können im Prinzip vollständig auf GOSUB verzichten, da ein Unterprogrammaufruf immer auch mittels einer Prozedur verwirklicht werden kann. Ein Unterprogramm per GOSUB aufzurufen ist eigentlich nicht mehr zeitgemäß. Aus Gründen der Kompatibilität wurde der Befehl allerdings im Sprachumfang belassen. |
Beispiel: | |
Ergebnis: | |
siehe auch: | RETURN GOTO DEF PROC |
GOTO | |
Typ: | Befehl |
Syntax: | GOTO <Marke> |
Erklärung: | Verzweigt an die durch <Marke>definierte Stelle im Programm. Generell führt die Verwendung von
GOTO sehr schnell zu sehr unübersichtlichen Programmen. Man sollte daher zu viele GOTOs nach Möglichkeit
vermeiden. Die strukturierte Programmierung, wie sie von Omikron Basic unterstützt wird, kommt in jedem Falle
auch ganz ohne GOTO aus. Es ist jedoch nicht auszuschließen, daß in dem einen oder anderen Fall (z.B.
bei nicht behebbaren Fehlern) ein GOTO einfach praktischer ist. Achtung: Verzweigen Sie niemals in eine Struktur (Schleife oder SELECT ... CASE) oder in eine Prozedur. Sprünge per GOTO sind nur in der gleichen Hierarchie-Ebene erlaubt. Um eine Struktur vorzeitig zu verlassen, verwenden Sie EXIT. |
Beispiel: | |
Ergebnis: | |
siehe auch: | GOSUB ON DEF PROC |
GRAF_PORT | |
Typ: | Befehl |
Syntax: | GRAF_PORT <num.Ausdruck> GRAF_PORT {<0>|<1>|<GrafPtr>} |
Erklärung: | Mit diesem Befehl ist es möglich, alle nachfolgenden Zeichenbefehle sowie PRINT
und WRITE in den angegebenen GraficsPort umzuleiten. In dem numerischen Ausdruck
muß 0,1 oder ein gültiger <GrafPtr> übergeben werden. Wie Sie selbst einen neuen GraficsPort
öffnen können, ist in "Inside Macintosh, Imaging with QuickDraw" erläutert. Der GRAF_PORT 1 Befehl überprüft zunächst, ob schon eine Seite auf dem Drucker geöffnet wurde. Wenn ja, erfolgen alle Ausgaben auf diese Seite, ansonsten wird eine neue Seite geöffnet. Wenn Sie mehr als eine Seite auf einmal bedrucken wollen, können Sie mit LPRINT CHR$(12); (Form Feed) erreichen, daß eine neue Seite angefangen wird. Mit GRAF_PORT 0 schließlich beenden Sie die Druckroutine, die letzte Seite wird geschlossen und das ganze Dokument (kann aus mehreren Seiten bestehen) wird auf dem Drucker ausgegeben. Achtung: Ungültige Werte hinter GRAF_PORT führen meißt zur sofortigen Beendigung des Programms oder gar zum Absturz des ganzen Systems. Auch wenn nur das Programm beendet wurde, sollte der Rechner neu gestartet werden, da es sonst zu unkalkulierbarem Verhalten kommen kann. Die Werte 0 und 1 sind vom Omikron Basic vordefiniert: 0: Alle Ausgaben landen auf dem Bildschirm bzw. im obersten Ausgabefenster. 1: Alle Ausgaben werden auf dem Drucker gemacht. Hinweis: Die Befehle INPUT und INPUT USING sowie FORM_ALERT setzen den GRAF_PORT immer auf 0 zurück |
Beispiel: |
Kreis 1,4,"Dieser Keis wird auf Papier gezeichnet" GRAF_PORT 0 DEF PROC Kreis(GrafPtr,F,Text$) |
Ergebnis: |
|
siehe auch: | CMD LPRINT |
HCOPY | |
Typ: | Befehl |
Syntax: | HCOPY |
Erklärung: | Wenn das OUTPUT_WINDOW eingeschaltet ist, wird eine Hardcopy des Puffers gemacht, der zum obersten Fenster gehört, sonst wird der komplette Bildschirminhalt auf dem Drucker ausgegeben. |
Beispiel: | |
Ergebnis: | |
siehe auch: |
HCOPY TEXT | |
Erklärung: | hat in Omikron Basic 6 keine Bedeutung und wird vom Compiler ignoriert. Bitte nicht verwenden. |
HEIGHT | |
Erklärung: | siehe TEXT HEIGHT |
HELP | |
Erklärung: | siehe ON HELP GOSUB |
HEX$ | |
Typ: | Funktion |
Syntax: | HEX$(<num.Ausdruck>) |
Erklärung: | Wandelt den numerischen Ausdruck in eine Zeichenkette um, die den gerundeten Wert des Ausdrucks als Hexadezimalzahl darstellt. |
Beispiel: |
|
Ergebnis: |
|
siehe auch: | BIN$ OCT$ VAL |
HIGH | |
Typ: | Funktion |
Syntax: | HIGH(<num.Ausdruck>) |
Erklärung: | Ermittelt die oberen 16 Bit des in Long-Integer-Format gewandelten numerischen Ausdrucks. Gegenstück zu dieser Funktion ist LOW. |
Beispiel: |
|
Ergebnis: |
|
siehe auch: | LOW |
H_CHAR | |
Typ: | Funktion |
Syntax: | H_CHAR |
Erklärung: | Diese Funktion gibt an, wieviele Zeichen untereinander auf den Bildschirms passen. Das hängt natürlich von dem eingestellten Zeichensatz und der Zeichengröße ab. |
Beispiel: | |
Ergebnis: | |
siehe auch: | H_PIXEL W_CHAR W_PIXEL |
H_PIXEL | |
Typ: | Funktion |
Syntax: | H_PIXEL |
Erklärung: | Diese Funktion ergibt die Höhe des Bildschirms in Pixeln. |
Beispiel: | |
Ergebnis: | |
siehe auch: | H_CHAR W_CHAR W_PIXEL |
IF ... THEN ... ELSE ... ENDIF | |
Typ: | Befehl |
Syntax: | IF <num.Ausdruck>THEN <Befehle>[ELSE <Befehle>] [ENDIF] IF <log.Ausdruck>THEN <abhängige Befehle (wahr) [ELSE <abhängige Befehle (falsch)>] [ENDIF] |
Erklärung: | Die IF...THEN Anweisung erlaubt die bedingte Ausführung von Befehlen. Die von der THEN-Anweisung abhängigen Befehle werden nur ausgeführt, wenn der logische Ausdruck wahr (ungleich 0) ist. Die von der ELSE-Anweisung abhängigen Befehle entsprechend bei falschem logischen Ausdruck (gleich 0). Wenn alle abhängigen Befehle in eine Zeile passen, kann das ENDIF entfallen. Ansonsten beschließt das ENDIF den Block der abhängigen Anweisungen. Stehen sehr viele Alternativen zur Auswahle so ist in vielen Fällen die Verwendung von SELECT... CASE vorteilhafter. |
Beispiele: |
IF <Bedingung> THEN ...IF <Bedingung> THEN ... ELSE ... mehrzeilig: mehrzeilig geschachtelt mit ELSE: |
Ergebnis: | |
siehe auch: | THEN ELSE ENDIF SELECT CASE |
IMP | |
Typ: | Operator |
Syntax: | <num.Ausdruck>IMP <num.Ausdruck> |
Erklärung: | Die beiden Aussagen werden logisch implement verknüpft. Die Wahrheitstabelle hierzu führt nur zu einer unwahren Aussage, wenn der erste Ausdruck wahr, er zweite aber unwahr ist. |
Beispiel: |
|
Ergebnis: |
|
siehe auch: | OR XOR AND NAND NOR |
INKEY$ | |
Typ: | Funktion |
Syntax: | INKEY$ |
Erklärung: | Holt eine Eingabe von der Tastatur. Ist keine Eingabe vorhanden, ergibt die Funktion einen Leerstring. Sonst ist
der String 4 Zeichen lang. Im ersten Byte werden die Modifier-Keys zurückgeliefert. Die einzelnen Bits haben dabei folgende Bedeutung: Bit 0: Comand-Taste Bit 1: Shift-Taste Bit 2: Caps-Lock-Taste Bit 3: Alternate-Taste Bit 4: Control-Taste Wenn eine normale Taste gedrückt ist, so wird im zweiten Byte der Virtual Key Code eingetragen. Siehe "Inside MacIntosh, Toolbox Essentials". Da bei Apple-Computern zwei Tasten gleichzeitig gedrückt sein können, enthält das dritte Byte den Wert der zweiten Taste, wobei bei zwei gleichzeitig gedrückten Tasten immer der niedrigere Wert im zweiten Byte und der höhere im dritten enthalten ist. Das vierte Byte schließlich enthält den Charakter-Code, wie er durch die 'KCHR'-Resource im Systemordner definiert ist. |
Beispiel: |
REPEAT A$= INKEY$ UNTIL LEN(A$) FOR N=1 TO 4 PRINT ASC( MID$(A$,N,1)), NEXT IF RIGHT$(A$,1)>=" " THEN PRINT RIGHT$(A$,1) ELSE PRINT UNTIL ASC( MID$(A$,2,1))=53 'Ende mit ESC |
Ergebnis: |
|
siehe auch: | INPUT INPUT$ |
INLINE | |
Typ: | Befehl |
Syntax: | INLINE <String-Ausdruck> |
Erklärung: | Der Befehl führt Maschinensprachebefehle aus. Das Maschinenprogramm muß dabei als Hexcode im <String-Ausdruck>
abgelegt sein. Es dürfen nur die von Apple als 'volatile' deklarierten Register verändert werden. Im einzelnen sind dies: R0,R3-R12 FPR0-FPR13 CR0,CR1,CR5-CR7 R31 zeigt auf den dynamischen Stack. Fehler, die Ihr Maschinenprogramm verursacht, können vom Omikron Basic nicht abgefangen werden. Es empfiehlt sich daher, in der Testphase zuvor einen geeigneten Debugger zu starten. Hinweis: Wenn <String-Ausdruck> eine Konstante ist, kann das Maschinenprogramm schon vom Compiler dekodiert und in den Programmcode eingefügt werden. Dadurch ist eine wesentlich schnellere Ausführung möglich, als bei einer Stringvariablen oder gar einem String-Ausdruck. |
Beispiel: | |
Ergebnis: | |
siehe auch: | CALL USR |
INPUT | |
Typ: | Befehl |
Syntax: | INPUT [<String-Ausdruck>;]<Variable>[[,<Variable>]] INPUT [<Prompt>;]<Variable>[[,<Variable>]] |
Erklärung: | Der INPUT Befehl liest eine oder mehrere Variablen von der Tastatur ein. Wenn angegeben, wird eine Eingabeaufforderung
(<Prompt>) ausgegeben, ansonsten einfach ein Fragezeichen. Die Eingabe wird mit [Return] abgeschlossen. Wenn
mehrere Werte in einer Zeile eingegeben werden sollen, müssen diese durch Kommata abgetrennt werden. Wenn
numerische Variablen eingelesen werden sollen, wird alles bis zum ersten ungültigen Zahlzeichen als Wert übernommen,
der Rest wird ignoriert. Führende Leerzeichen werden überlesen. Der Wert, den die Variable vor Ausführung
des INPUT-Befehls hatte, spielt keine Rolle. Es wird im jedem Fall ein neuer Wert zugewiesen. Wesentlich erweiterte
Möglichkeiten bietet der INPUT USING Befehl. Hinweis: INPUT blockiert das System nicht. Die Pseudo-Multitaskingbefhle (z.B. ON TIMER GOSUB) werden weiterhin ausgeführt und auch andere Programme laufen weiter. Auch ein Programmabbruch mit [Ctrl]+[C] ist während der Eingabe möglich. |
Beispiel: |
PRINT A,B,C INPUT @(10,0);"Geben Sie Ihren Namen ein: ";N$ PRINT N$ |
Ergebnis: |
|
siehe auch: | INPUT USING INPUT$ INKEY$ |
INPUT # | |
Typ: | Befehl |
Syntax: | INPUT #<num.Ausdruck>,<Variable>[[,<Variable>]] INPUT #<Dateinummer>,<Variable>[[,<Variable>]] |
Erklärung: | Es werden aus einer sequentiellen Datei eine oder mehrere Variablen eingelesen. Wie bei INPUT
können mehrere Variablen in einer Zeile durch Kommata getrennt erscheinen. Wichtig: Mit INPUT # müssen Sie immer eine ganze Zeile der Datei pro INPUT-Anweisung lesen, d.h. die INPUT-Anweisung muß genauso viele Variablen enthalten, wie Werte in einer Zeile stehen. Wenn Sie nicht wissen, wieviele Werte sich in einer Zeile befinden, so lesen Sie besser mit LINE INPUT zunächst die ganze Zeile ein und weisen die verschiedenen Werte erst später den einzelnen Variablen zu. Achtung: INPUT # ist nicht geeignet, um Daten von der Modemschnittstelle bzw. von der Druckerschnittstelle zu holen. Verwenden Sie dafür INPUT$ oder besser GET |
Beispiel: |
WRITE #1,1,2,3 WRITE #1,4,5,6 CLOSE 1 OPEN "I",1,FN Get_Fsspec$(0,0,"TEST.DAT") WHILE NOT EOF(1) INPUT #1,A,B,C PRINT A,B,C WEND CLOSE 1 |
Ergebnis: |
|
siehe auch: | LINE INPUT # INPUT$ GET |
INPUT USING | |
Typ: | Befehl |
Syntax: | INPUT [<String-Ausdruck>;]<String-Variable> USING <String-Ausdruck>,[<num.Variable>],[<num.Ausdruck>],
[<num.Ausdruck>][,<num.Variable>] INPUT [<Prompt>;]<Eingabe-Variable> USING <Steuerstring>,[<Rückgabe-Variable>],[<Länge>], [<Füllzeichen>][,<Positions-Variable>] |
Erklärung: | INPUT USING ermöglicht eine formatierte Maskeneingabe mit diversen Einstellungsmöglichkeiten. Abhängig
vom Steuerstring werden bei der Eingabe nur bestimmte Zeichen zugelassen: "0" Ziffern "a" Buchstaben (einschl. länderspezifische Zeichen) "%" Sonderzeichen (ausschl. länderspezifische Zeichen) "^" Ctrl-Zeichen (Eingabe mit [Ctrl]+[A],[Ctrl]+[Buchstabe]) "+<Zeichen>" einzelnes Zeichen zulassen "-<Zeichen>" einzelnes Zeichen verbieten Die Steuerzeichen selbst können groß oder klein geschrieben werden. Um also Namen eingeben zu können, könnte Ihr Steuerstring so aussehen: "A +- +." (Alle Buchstaben einschl. Sonderzeichen, der Bindestrich und der Punkt sind zugelassen). Telefonnummern würde man mit "0 +/" eingeben können. Weiterhin besteht die Möglichkeit, bestimmte Zeichen gleich bei der Eingabe umwandeln zu lassen: "u" alles nach Großbuchstaben wandeln "l" alles nach Kleinbuchstaben wandeln "c<Zeichen1><Zeichen2>" wird <Zeichen1> eingegeben so wird es automatisch durch <Zeichen 2> ersetzt. Hinweis: <Zeichen1> muß natürlich auch in der Auswahl der zugelassenen Zeichen sein. Um also bei einer Zahleneingabe immer sofort statt Dezimalpunkt mit Komma zu arbeiten, würde ein Steuerstring "0 +.+, c.," benötigt. Grundsätzlich wird die Eingabe mit [Return] beendet. Sie können jedoch mit dem Steuerstring weitere Tasten oder Ereignisse bestimmen, die die Eingabe beenden: "x<Zeichen>" Sobald die Taste mit demselben ASCII-Code wie <Zeichen> gedrückt wird, wird die Eingabe abgebrochen. "s<Zeichen>" Sobald die Taste mit demselben VirtuelKeyCode wie der ASCII-Code von <Zeichen> gedrückt wird, wird die Eingabe abgebrochen. Dies ermöglicht z.B. die Unterscheidung zwischen Ziffernblock und Haupttastatur und erlaubt auch den Abbruch durch Tasten, die als ASCII-Code eine Null zurückgeben, wie z.B. [Cursor hoch]. "<" linke Randüberschreitung. Die Eingabe wird abgebrochen, wenn der Cursor über den linken Rand hinaus bewegt wird. ">" rechte Randüberschreitung. Die Eingabe wird abgebrochen, wenn der Cursor über den rechten Rand hinaus bewegt wird. Der <Prompt> wird wie bei allen Eingabeanweisungen vor der Eingabe ausgegeben und kann natürlich auch eine Positionsangabe mit "@" enthalten. Die <Eingabe-Variable> muß immer vom Stringtyp sein, da sie während der Eingabe als Puffer dient. Numerische Eingaben werden nach der Eingabe mittels VAL umgewandelt. Die <Rückgabe-Variable> gibt Aufschluß über die Abbruchursache: 0 die Eingabe wurde mit [Return] verlassen -1 linke Randüberschreitung -2 rechte Randüberschreitung Positive Werte stehen für eine andere Abbruchtaste. Sie wird durch einen vier Byte langen Wert gekennzeichnet, der - ähnlich wie bei INKEY$ - die (C)ommandbits, den (V)irtuelKeyCode und den (A)SCII-Code enthält: $CC VV 00 AA (hexadezimale Darstellung). Durch die Angabe einer <Länge> kann die Eingabe auf eine bestimmte Zeichenzahl begrenzt werden. Die Länge sollte immer mit angegeben werden, da eine zu lange Eingabezeile (mehr Spalten als darstellbar) nicht vernünftig funktioniert. Der ASCII-Code des <Füllzeichens> bestimmt das Zeichen, mit dem die Eingabezeile hinterlegt wird, um das Eingabefeld anzudeuten. Wird nichts angegeben so ist das "_"-Zeichen voreingestellt. Denkbar wäre z.B. 42 ("*") für Zahleneingaben bei Schecks oder 32 (Leerzeichen), wenn gar nicht hinterlegt werden soll. Die <Positions-Variable> schließlich bestimmt die Position, die der Cursor zu Beginn der Eingabe einnimmt. Sie liefert auch die zuletzt eingenomme Cursor-Position zurück. Man kann also z.B. den Cursor gezielt an die Fehlerstelle bewegen, wenn im Fehlerfall die Eingabe wiederholt werden muß. Es wäre auch denkbar, den Cursor immer wieder an den Anfang der Eingabe zu stellen, um so schneller Korrekturen vornehmen zu können. Wichtig: Die <Eingabe-Variable> wird im Unterschied zu INPUT nicht in jedem Fall zuerst gelöscht, sondern erscheint als Vorgabe in der Eingabezeile. Damit können Sie dem Anwender bereits sinnvolle Eingaben vorschlagen, z.B. das aktuelle Datum. Es genügt dann ein einfaches [Return], um die Eingabe zu übernehmen. Wenn mehrfach dieselben oder ähnliche Eingaben verlangt werden, kann der alte Wert einfach stehen bleiben oder geringfügig modifiziert übernommen werden. Nach Beendigung der Eingabe mit INPUT USING wird kein Zeilenvorschub ausgegeben. Soll also die nächste Ausgabe in einer neuen Zeile erfolgen, so muß zuvor mit PRINT ein Zeilenvorschub ausgelöst werden. Hinweis: INPUT USING blockiert das System nicht. Die Pseudo-Multitaskingbefhle (z.B. ON TIMER GOSUB) werden weiterhin ausgeführt und auch andere Programme laufen weiter. Auch ein Programmabbruch mit [Ctrl]+[C] ist während der Eingabe möglich. |
Beispiel: |
END DEF PROC Eingabe
|
Ergebnis: |
|
siehe auch: | INPUT INPUT$ INKEY$ USING |